package com.yonxao.demo.crud.annotation.valid;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.util.StringUtils;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.io.IOException;

/**
 * 校验字符串是否是 JSON 格式
 * <p>
 * 自定义注解校验器，需指定注解和校验类型
 *
 * @author xiaosaguo
 * @date 2020/09/21 20:57
 */
public class IsJsonConstraintValidator implements ConstraintValidator<IsJson, String> {

    public static boolean isJsonValid(String jsonInString) {
        try {
            final ObjectMapper mapper = new ObjectMapper();
            mapper.readTree(jsonInString);
            return true;
        } catch (IOException e) {
            return false;
        }
    }

    /**
     * 校验逻辑，是否是 JSON 字符串 <br>
     * 如果为空返回 true，若希望不能为空，配合 @Null 或 @NotNull、@NotEmpty 等注解校验
     *
     * @param value   被校验的值
     * @param context 上下文环境信息
     * @return boolean 校验结果
     */
    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        return StringUtils.isEmpty(value) || isJsonValid(value);
    }
}